module micro_instruction_controller(
	input wire clk,          // 时钟信号
	input wire reset,        // 复位信号
	input wire [7:0] flag_group,  // 标记组（8位）
	output reg [15:0] ins  // 指令线（16位）
);

// 内部数据定义
reg [15:0] uPC;  // 16位微指令计数器
reg [35:0] uIR;
reg [35:0] uROM[4095:0];  // 36*4096位微指令存储器
reg [15:0] next[255:0];  // 16*256位下地址跳转表

// 微指令计数器和指令线的初始化
initial begin
	uPC = 16'b0;
	ins = 16'b0;
end

// 时钟上升沿激活
always @(posedge clk) begin
	if (reset) begin
		// 复位操作
		uPC <= 16'b0;
		ins <= 16'b0;
	end else begin
		// 读取微指令存储器中的当前指令
		uIR = uROM[uPC];
		// 输出高16位指令线内容
		ins <= uIR[35:20];
		// 根据标记组决定下地址
		if (flag_group == uIR[19:12]) begin
			// 使用指令中的下地址
			uPC <= uIR[11:0];
		end 
		else begin
			// 使用下地址跳转表中的地址
			uPC <= next[uIR[19:12]];
		end
	end
end

endmodule